/*     */ package com.zimbra.cs.mime;
/*     */ 
/*     */ import com.google.common.base.Strings;
/*     */ import com.zimbra.common.calendar.ZCalendar.ZVCalendar;
/*     */ import com.zimbra.common.localconfig.DebugConfig;
/*     */ import com.zimbra.common.service.ServiceException;
/*     */ import com.zimbra.common.util.ByteUtil;
/*     */ import com.zimbra.cs.convert.AttachmentInfo;
/*     */ import com.zimbra.cs.convert.ConversionException;
/*     */ import com.zimbra.cs.index.IndexDocument;
/*     */ import com.zimbra.cs.index.analysis.MimeTypeTokenStream;
/*     */ import com.zimbra.cs.object.MatchedObject;
/*     */ import com.zimbra.cs.object.ObjectHandler;
/*     */ import com.zimbra.cs.object.ObjectHandlerException;
/*     */ import java.io.IOException;
/*     */ import java.io.InputStream;
/*     */ import java.io.UnsupportedEncodingException;
/*     */ import java.util.ArrayList;
/*     */ import java.util.List;
/*     */ import javax.activation.DataSource;
/*     */ import javax.mail.internet.MimeUtility;
/*     */ import org.apache.lucene.document.Document;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public abstract class MimeHandler
/*     */ {
/*     */   public static final String ARCHIVE_SEQUENCE = "archseq";
/*     */   public static final String CATCH_ALL_TYPE = "all";
/*     */   private MimeTypeInfo mimeTypeInfo;
/*     */   private String filename;
/*     */   private DataSource dataSource;
/*     */   private String contentType;
/*  63 */   private long size = -1L;
/*     */   
/*     */   private String defaultCharset;
/*     */   
/*     */   private String partName;
/*     */   
/*     */ 
/*     */   protected abstract boolean runsExternally();
/*     */   
/*     */   MimeTypeInfo getMimeTypeInfo()
/*     */   {
/*  74 */     return this.mimeTypeInfo;
/*     */   }
/*     */   
/*     */   void setMimeTypeInfo(MimeTypeInfo value) {
/*  78 */     this.mimeTypeInfo = value;
/*     */   }
/*     */   
/*     */   public String getContentType() {
/*  82 */     return Strings.nullToEmpty(this.contentType);
/*     */   }
/*     */   
/*     */   public void setContentType(String value) {
/*  86 */     this.contentType = value;
/*     */   }
/*     */   
/*     */   protected String getDefaultCharset() {
/*  90 */     return this.defaultCharset;
/*     */   }
/*     */   
/*     */   public void setDefaultCharset(String value) {
/*  94 */     this.defaultCharset = value;
/*     */   }
/*     */   
/*     */   public String getDescription() {
/*  98 */     if (this.mimeTypeInfo == null) {
/*  99 */       return "";
/*     */     }
/* 101 */     return this.mimeTypeInfo.getDescription();
/*     */   }
/*     */   
/*     */   public boolean isIndexingEnabled() {
/* 105 */     return this.mimeTypeInfo == null ? false : this.mimeTypeInfo.isIndexingEnabled();
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public void init(DataSource source)
/*     */   {
/* 115 */     this.dataSource = source;
/*     */   }
/*     */   
/*     */   void setPartName(String value) {
/* 119 */     this.partName = value;
/*     */   }
/*     */   
/*     */   public String getPartName() {
/* 123 */     return this.partName;
/*     */   }
/*     */   
/*     */   public void setFilename(String value) {
/* 127 */     this.filename = value;
/*     */   }
/*     */   
/*     */   public String getFilename() {
/* 131 */     return this.filename;
/*     */   }
/*     */   
/*     */   public DataSource getDataSource() {
/* 135 */     return this.dataSource;
/*     */   }
/*     */   
/*     */   public long getSize() {
/* 139 */     return this.size;
/*     */   }
/*     */   
/*     */   public void setSize(long value) {
/* 143 */     this.size = value;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */   protected abstract void addFields(Document paramDocument)
/*     */     throws MimeHandlerException;
/*     */   
/*     */ 
/*     */ 
/*     */   public final String getContent()
/*     */     throws MimeHandlerException
/*     */   {
/* 156 */     if (!DebugConfig.disableMimePartExtraction) {
/* 157 */       String toRet = getContentImpl();
/* 158 */       if (toRet == null) {
/* 159 */         return "";
/*     */       }
/* 161 */       return toRet;
/*     */     }
/* 163 */     if ((this.dataSource != null) && (!this.mDrainedContent)) {
/* 164 */       InputStream is = null;
/*     */       try {
/* 166 */         is = this.dataSource.getInputStream();
/*     */         
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/* 174 */         while (is.read(sDrainBuffer) != -1) {}
/*     */       } catch (IOException e) {
/* 176 */         throw new MimeHandlerException("cannot extract text", e);
/*     */       } finally {
/* 178 */         ByteUtil.closeStream(is);
/*     */       }
/* 180 */       this.mDrainedContent = true;
/*     */     }
/* 182 */     return "";
/*     */   }
/*     */   
/* 185 */   private boolean mDrainedContent = false;
/* 186 */   private static byte[] sDrainBuffer = new byte['က'];
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   protected abstract String getContentImpl()
/*     */     throws MimeHandlerException;
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */   public ZCalendar.ZVCalendar getICalendar()
/*     */     throws MimeHandlerException
/*     */   {
/* 201 */     return null;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public abstract String convert(AttachmentInfo paramAttachmentInfo, String paramString)
/*     */     throws IOException, ConversionException;
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public boolean handlesArchive()
/*     */   {
/* 221 */     return false;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public abstract boolean doConversion();
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public final Document getDocument()
/*     */     throws MimeHandlerException, ObjectHandlerException, ServiceException
/*     */   {
/* 242 */     IndexDocument doc = new IndexDocument(new Document());
/* 243 */     MimeTypeTokenStream tokenStream = new MimeTypeTokenStream(getContentType());Throwable localThrowable2 = null;
/* 244 */     try { doc.addMimeType(tokenStream);
/*     */     }
/*     */     catch (Throwable localThrowable1)
/*     */     {
/* 243 */       localThrowable2 = localThrowable1;throw localThrowable1;
/*     */     } finally {
/* 245 */       if (tokenStream != null) if (localThrowable2 != null) try { tokenStream.close(); } catch (Throwable x2) { localThrowable2.addSuppressed(x2); } else tokenStream.close();
/*     */     }
/* 247 */     addFields(doc.toDocument());
/* 248 */     String content = getContent();
/* 249 */     doc.addContent(content);
/* 250 */     getObjects(content, doc);
/*     */     
/* 252 */     doc.addPartName(this.partName);
/*     */     
/* 254 */     if (this.dataSource != null) {
/* 255 */       String name = this.dataSource.getName();
/* 256 */       if (name != null) {
/*     */         try {
/* 258 */           name = MimeUtility.decodeText(name);
/*     */         }
/*     */         catch (UnsupportedEncodingException ignore) {}
/* 261 */         doc.addFilename(name);
/*     */       }
/*     */     }
/* 264 */     return doc.toDocument();
/*     */   }
/*     */   
/*     */   public static void getObjects(String text, IndexDocument doc)
/*     */     throws ObjectHandlerException, ServiceException
/*     */   {
/* 270 */     if (DebugConfig.disableObjects) {
/* 271 */       return;
/*     */     }
/*     */     
/* 274 */     List<ObjectHandler> objects = ObjectHandler.getObjectHandlers();
/* 275 */     StringBuffer l_objects = new StringBuffer();
/* 276 */     for (ObjectHandler h : objects)
/* 277 */       if (h.isIndexingEnabled())
/*     */       {
/*     */ 
/* 280 */         List<MatchedObject> matchedObjects = new ArrayList();
/* 281 */         h.parse(text, matchedObjects, true);
/* 282 */         if (!matchedObjects.isEmpty()) {
/* 283 */           if (l_objects.length() > 0) {
/* 284 */             l_objects.append(',');
/*     */           }
/* 286 */           l_objects.append(h.getType());
/*     */         }
/*     */       }
/* 289 */     if (l_objects.length() > 0) {
/* 290 */       doc.addObjects(l_objects.toString());
/*     */     }
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public AttachmentInfo getDocInfoFromArchive(AttachmentInfo archiveDocInfo, String seq)
/*     */     throws IOException
/*     */   {
/* 304 */     return null;
/*     */   }
/*     */ }


/* Location:              /home/mint/zimbrastore.jar!/com/zimbra/cs/mime/MimeHandler.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */